Autogenerated HTML docs for v1.7.4.1-415-g5e839
diff --git a/RelNotes/1.7.5.txt b/RelNotes/1.7.5.txt index b917d0b..24f5d8c 100644 --- a/RelNotes/1.7.5.txt +++ b/RelNotes/1.7.5.txt
@@ -15,6 +15,9 @@ * The codebase is getting prepared for i18n/l10n; no translated/translatable strings in the code yet. + * The bash completion script can now complete symmetric difference + for "git diff" command, e.g. "git diff ...bra<TAB>". + * "git apply -v" reports offset lines when the patch does not apply at the exact location recorded in the diff output. @@ -43,6 +46,11 @@ reached, without spewing unnecessary error messages that complain about the server response it never got. + * "git fetch" vs "git upload-pack" transfer learned 'no-done' + protocol extension to save one round-trip after the content + negotiation is done. This saves one HTTP RPC, reducing the overall + latency for a trivial fetch. + * "git grep -f <filename>" learned to treat "-" as "read from the standard input stream". @@ -52,6 +60,11 @@ * "git log" type commands now understand globbing pathspecs. You can say "git log -- '*.txt'" for example. + * "git log" family of commands learned --cherry and --cherry-mark + options that can be used to view two diverged branches while omitting + or highlighting equivalent changes that appear on both sides of a + symmetric difference (e.g. "log --cherry A...B"). + * "git mergetool" learned how to drive "beyond compare 3" as well. * "git rerere forget" without pathspec used to forget all the saved @@ -93,8 +106,22 @@ in the working tree that are in the way in order to check out paths under it from the named branch (js/checkout-untracked-symlink). + * "git fetch" from a client that is mostly following the remote + needlessly told all of its refs to the server for both sides to + compute the set of objects that need to be transferred efficiently, + instead of stopping when the server heard enough. In a project with + many tags, this turns out to be extremely wasteful, especially over + the smart HTTP transport (sp/maint-{upload,fetch}-pack-stop-early~1). + + * "git fetch" run from a repository that uses the same repository as + its alternate object store as the repository it is fetching from + did not tell the server that it already has access to objects + reachable from the refs in their common alternate object store, + causing it to fetch unnecessary objects (jc/maint-fetch-alt). + --- exec >/var/tmp/1 O=v1.7.4.1-352-gcdc3466 +O=v1.7.4.1-414-gaeb2aaa echo O=$(git describe 'master') git shortlog --no-merges ^maint ^$O master
diff --git a/git-bisect.html b/git-bisect.html index db48733..bfc3b7f 100644 --- a/git-bisect.html +++ b/git-bisect.html
@@ -642,27 +642,6 @@ </li> <li> <p> -Automatically bisect a broken test suite: -</p> -<div class="listingblock"> -<div class="content"> -<pre><tt>$ cat ~/test.sh -#!/bin/sh -make || exit 125 # this skips broken builds -make test # "make test" runs the test suite -$ git bisect start v1.3 v1.1 -- # v1.3 is bad, v1.1 is good -$ git bisect run ~/test.sh</tt></pre> -</div></div> -<div class="paragraph"><p>Here we use a "test.sh" custom script. In this script, if "make" -fails, we skip the current commit.</p></div> -<div class="paragraph"><p>It is safer to use a custom script outside the repository to prevent -interactions between the bisect, make and test processes and the -script.</p></div> -<div class="paragraph"><p>"make test" should "exit 0", if the test suite passes, and -"exit 1" otherwise.</p></div> -</li> -<li> -<p> Automatically bisect a broken test case: </p> <div class="listingblock"> @@ -670,26 +649,64 @@ <pre><tt>$ cat ~/test.sh #!/bin/sh make || exit 125 # this skips broken builds -~/check_test_case.sh # does the test case passes ? +~/check_test_case.sh # does the test case pass? $ git bisect start HEAD HEAD~10 -- # culprit is among the last 10 $ git bisect run ~/test.sh</tt></pre> </div></div> -<div class="paragraph"><p>Here "check_test_case.sh" should "exit 0" if the test case passes, +<div class="paragraph"><p>Here we use a "test.sh" custom script. In this script, if "make" +fails, we skip the current commit. +"check_test_case.sh" should "exit 0" if the test case passes, and "exit 1" otherwise.</p></div> -<div class="paragraph"><p>It is safer if both "test.sh" and "check_test_case.sh" scripts are +<div class="paragraph"><p>It is safer if both "test.sh" and "check_test_case.sh" are outside the repository to prevent interactions between the bisect, make and test processes and the scripts.</p></div> </li> <li> <p> -Automatically bisect a broken test suite: +Automatically bisect with temporary modifications (hot-fix): +</p> +<div class="listingblock"> +<div class="content"> +<pre><tt>$ cat ~/test.sh +#!/bin/sh + +# tweak the working tree by merging the hot-fix branch +# and then attempt a build +if git merge --no-commit hot-fix && + make +then + # run project specific test and report its status + ~/check_test_case.sh + status=$? +else + # tell the caller this is untestable + status=125 +fi + +# undo the tweak to allow clean flipping to the next commit +git reset --hard + +# return control +exit $status</tt></pre> +</div></div> +<div class="paragraph"><p>This applies modifications from a hot-fix branch before each test run, +e.g. in case your build or test environment changed so that older +revisions may need a fix which newer ones have already. (Make sure the +hot-fix branch is based off a commit which is contained in all revisions +which you are bisecting, so that the merge does not pull in too much, or +use <tt>git cherry-pick</tt> instead of <tt>git merge</tt>.)</p></div> +</li> +<li> +<p> +Automatically bisect a broken test case: </p> <div class="listingblock"> <div class="content"> <pre><tt>$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10 $ git bisect run sh -c "make || exit 125; ~/check_test_case.sh"</tt></pre> </div></div> -<div class="paragraph"><p>Does the same as the previous example, but on a single line.</p></div> +<div class="paragraph"><p>This shows that you can do without a run script if you write the test +on a single line.</p></div> </li> </ul></div> </div> @@ -704,7 +721,7 @@ </div> <div id="footer"> <div id="footer-text"> -Last updated 2011-03-20 19:41:42 UTC +Last updated 2011-03-23 05:39:52 UTC </div> </div> </body>
diff --git a/git-bisect.txt b/git-bisect.txt index 4b4b096..7b7bafb 100644 --- a/git-bisect.txt +++ b/git-bisect.txt
@@ -279,53 +279,68 @@ $ git bisect run make test # "make test" builds and tests ------------ -* Automatically bisect a broken test suite: -+ ------------- -$ cat ~/test.sh -#!/bin/sh -make || exit 125 # this skips broken builds -make test # "make test" runs the test suite -$ git bisect start v1.3 v1.1 -- # v1.3 is bad, v1.1 is good -$ git bisect run ~/test.sh ------------- -+ -Here we use a "test.sh" custom script. In this script, if "make" -fails, we skip the current commit. -+ -It is safer to use a custom script outside the repository to prevent -interactions between the bisect, make and test processes and the -script. -+ -"make test" should "exit 0", if the test suite passes, and -"exit 1" otherwise. - * Automatically bisect a broken test case: + ------------ $ cat ~/test.sh #!/bin/sh make || exit 125 # this skips broken builds -~/check_test_case.sh # does the test case passes ? +~/check_test_case.sh # does the test case pass? $ git bisect start HEAD HEAD~10 -- # culprit is among the last 10 $ git bisect run ~/test.sh ------------ + -Here "check_test_case.sh" should "exit 0" if the test case passes, +Here we use a "test.sh" custom script. In this script, if "make" +fails, we skip the current commit. +"check_test_case.sh" should "exit 0" if the test case passes, and "exit 1" otherwise. + -It is safer if both "test.sh" and "check_test_case.sh" scripts are +It is safer if both "test.sh" and "check_test_case.sh" are outside the repository to prevent interactions between the bisect, make and test processes and the scripts. -* Automatically bisect a broken test suite: +* Automatically bisect with temporary modifications (hot-fix): ++ +------------ +$ cat ~/test.sh +#!/bin/sh + +# tweak the working tree by merging the hot-fix branch +# and then attempt a build +if git merge --no-commit hot-fix && + make +then + # run project specific test and report its status + ~/check_test_case.sh + status=$? +else + # tell the caller this is untestable + status=125 +fi + +# undo the tweak to allow clean flipping to the next commit +git reset --hard + +# return control +exit $status +------------ ++ +This applies modifications from a hot-fix branch before each test run, +e.g. in case your build or test environment changed so that older +revisions may need a fix which newer ones have already. (Make sure the +hot-fix branch is based off a commit which is contained in all revisions +which you are bisecting, so that the merge does not pull in too much, or +use `git cherry-pick` instead of `git merge`.) + +* Automatically bisect a broken test case: + ------------ $ git bisect start HEAD HEAD~10 -- # culprit is among the last 10 $ git bisect run sh -c "make || exit 125; ~/check_test_case.sh" ------------ + -Does the same as the previous example, but on a single line. +This shows that you can do without a run script if you write the test +on a single line. SEE ALSO --------
diff --git a/git-log.html b/git-log.html index 18b0f2f..44beed0 100644 --- a/git-log.html +++ b/git-log.html
@@ -754,6 +754,15 @@ </p> </dd> <dt class="hdlist1"> +--cherry-mark +</dt> +<dd> +<p> + Like <tt>--cherry-pick</tt> (see below) but mark equivalent commits + with <tt>=</tt> rather than omitting them, and inequivalent ones with <tt>+</tt>. +</p> +</dd> +<dt class="hdlist1"> --cherry-pick </dt> <dd> @@ -771,6 +780,36 @@ excluded from the output.</p></div> </dd> <dt class="hdlist1"> +--left-only +</dt> +<dt class="hdlist1"> +--right-only +</dt> +<dd> +<p> + List only commits on the respective side of a symmetric range, + i.e. only those which would be marked <tt><</tt> resp. <tt>></tt> by + <tt>--left-right</tt>. +</p> +<div class="paragraph"><p>For example, <tt>--cherry-pick --right-only A…B</tt> omits those +commits from <tt>B</tt> which are in <tt>A</tt> or are patch-equivalent to a commit in +<tt>A</tt>. In other words, this lists the <tt>+</tt> commits from <tt>git cherry A B</tt>. +More precisely, <tt>--cherry-pick --right-only --no-merges</tt> gives the exact +list.</p></div> +</dd> +<dt class="hdlist1"> +--cherry +</dt> +<dd> +<p> + A synonym for <tt>--right-only --cherry-mark --no-merges</tt>; useful to + limit the output to the commits on our side and mark those that + have been applied to the other side of a forked history with + <tt>git log --cherry upstream…mybranch</tt>, similar to + <tt>git cherry upstream mybranch</tt>. +</p> +</dd> +<dt class="hdlist1"> -g </dt> <dt class="hdlist1">
diff --git a/git-rev-list.html b/git-rev-list.html index 671f962..521aadf 100644 --- a/git-rev-list.html +++ b/git-rev-list.html
@@ -437,6 +437,9 @@ [ --parents ] [ --timestamp ] [ --left-right ] + [ --left-only ] + [ --right-only ] + [ --cherry-mark ] [ --cherry-pick ] [ --encoding[=<encoding>] ] [ --(author|committer|grep)=<pattern> ] @@ -747,6 +750,15 @@ </p> </dd> <dt class="hdlist1"> +--cherry-mark +</dt> +<dd> +<p> + Like <tt>--cherry-pick</tt> (see below) but mark equivalent commits + with <tt>=</tt> rather than omitting them, and inequivalent ones with <tt>+</tt>. +</p> +</dd> +<dt class="hdlist1"> --cherry-pick </dt> <dd> @@ -764,6 +776,36 @@ excluded from the output.</p></div> </dd> <dt class="hdlist1"> +--left-only +</dt> +<dt class="hdlist1"> +--right-only +</dt> +<dd> +<p> + List only commits on the respective side of a symmetric range, + i.e. only those which would be marked <tt><</tt> resp. <tt>></tt> by + <tt>--left-right</tt>. +</p> +<div class="paragraph"><p>For example, <tt>--cherry-pick --right-only A…B</tt> omits those +commits from <tt>B</tt> which are in <tt>A</tt> or are patch-equivalent to a commit in +<tt>A</tt>. In other words, this lists the <tt>+</tt> commits from <tt>git cherry A B</tt>. +More precisely, <tt>--cherry-pick --right-only --no-merges</tt> gives the exact +list.</p></div> +</dd> +<dt class="hdlist1"> +--cherry +</dt> +<dd> +<p> + A synonym for <tt>--right-only --cherry-mark --no-merges</tt>; useful to + limit the output to the commits on our side and mark those that + have been applied to the other side of a forked history with + <tt>git log --cherry upstream…mybranch</tt>, similar to + <tt>git cherry upstream mybranch</tt>. +</p> +</dd> +<dt class="hdlist1"> -g </dt> <dt class="hdlist1"> @@ -1945,7 +1987,7 @@ </div> <div id="footer"> <div id="footer-text"> -Last updated 2011-03-15 23:30:14 UTC +Last updated 2011-03-23 05:39:52 UTC </div> </div> </body>
diff --git a/git-rev-list.txt b/git-rev-list.txt index 5ce4d7f..b08dfbc 100644 --- a/git-rev-list.txt +++ b/git-rev-list.txt
@@ -31,6 +31,9 @@ [ \--parents ] [ \--timestamp ] [ \--left-right ] + [ \--left-only ] + [ \--right-only ] + [ \--cherry-mark ] [ \--cherry-pick ] [ \--encoding[=<encoding>] ] [ \--(author|committer|grep)=<pattern> ]
diff --git a/rev-list-options.txt b/rev-list-options.txt index 09860de..5c6850f 100644 --- a/rev-list-options.txt +++ b/rev-list-options.txt
@@ -151,6 +151,11 @@ to /dev/null as the output does not have to be formatted. endif::git-rev-list[] +--cherry-mark:: + + Like `--cherry-pick` (see below) but mark equivalent commits + with `=` rather than omitting them, and inequivalent ones with `+`. + --cherry-pick:: Omit any commit that introduces the same change as @@ -165,6 +170,27 @@ from branch A). With this option, such pairs of commits are excluded from the output. +--left-only:: +--right-only:: + + List only commits on the respective side of a symmetric range, + i.e. only those which would be marked `<` resp. `>` by + `--left-right`. ++ +For example, `--cherry-pick --right-only A...B` omits those +commits from `B` which are in `A` or are patch-equivalent to a commit in +`A`. In other words, this lists the `{plus}` commits from `git cherry A B`. +More precisely, `--cherry-pick --right-only --no-merges` gives the exact +list. + +--cherry:: + + A synonym for `--right-only --cherry-mark --no-merges`; useful to + limit the output to the commits on our side and mark those that + have been applied to the other side of a forked history with + `git log --cherry upstream...mybranch`, similar to + `git cherry upstream mybranch`. + -g:: --walk-reflogs::